﻿#!/bin/bash
#
# 1. Wizyta na głównej stronie serwisu eBay.
# 2. „Kliknięcie” łącza „Zaloguj się”.
# 3. Logowanie z wykorzystaniem podanej nazwy użytkownika i hasła.
# 4. Wizyta na stronie „Mój eBay” dla tego użytkownika.
# 5. Zgłoszenie informacji o sukcesie bądź niepowodzeniu.
#

# Zmienne pomocnicze.
# Gdzie jest cURL?
CURL="/usr/local/bin/curl"

# User-Agent (Firefox w systemie Mac OS X) stworzony w ten sposób, aby podzielić wiersze
# bez konieczności wstawiania znaku przejścia do nowego wiersza.
UA="Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US;"
UA="${UA} rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"

# Zbiorczy plik cookie.
JAR="cookies.txt"

# Dane identyfikacyjne konta eBay, które wykorzystamy.
USER=moj-Uzytkownik-eBay
PASS=moje-Haslo-eBay

# Jeśli istnieje zbiorczy plik cookie, usuwamy go. Jest to część konfiguracji testowej.
[ -f ${JAR} ] && rm -f "${JAR}"

# Do śledzenia postępów operacji wykorzystamy zmienną 'step'. Zmienna ta
# pozwoli nam na określenie miejsca, gdzie nastąpiła awaria, w przypadku awarii oraz będzie stanowiła
# wygodny sposób nazywania plików.
typeset -i step
step=1

# Pierwszy etap: odwiedziny na stronie głównej, pobranie zbioru plików cookie.
echo -n "krok [${step} "
${CURL} -s -L -A "${UA}" -c "${JAR}" -b "${JAR}" -e ";auto" \
    -o "krok-${step}.html" http://www.ebay.pl/
if [ $? = 0 ]; then
    step=$step+1
    echo -n "OK] [${step} "
else
    echo "NIEPOWODZENIE]"
    exit 1
fi

# Następnie klikamy na łącze „Zaloguj się”, aby wyświetlić stronę logowania.
# Z naszych obserwacji wynika, że to łącze (które nie jest typu SSL) zwykle powoduje przekierowanie serii 300.
# Skorzystamy z opcji -L, aby podążyć za przekierowaniem i pobrać także
# stronę docelową.
${CURL} -s -L -A "${UA}" -c "${JAR}" -b "${JAR}" -e ";auto" \
    -o "krok-${step}.html" \
    'http://signin.ebay.pl/ws/eBayISAPI.dll?SignIn'
if [ $? = 0 ]; then
    step=$step+1
    echo -n "OK] [${step} "
else
    echo "NIEPOWODZENIE]"
    exit 1
fi

# Teraz logujemy się. Jest to żądanie post. Z obserwacji wiemy, że taka próba, jeśli będzie pomyślna, prawdopodobnie 
# zakończy się zwróceniem statusu OK serii 200. Powinniśmy raczej 
# określić, co się stanie w przypadku awarii, i obsłużyć ten przypadek.
${CURL} -s -L -A "${UA}" -c "${JAR}" -b "${JAR}" -e ";auto" \
  -d MfcISAPICommand=SignInWelcome \
  -d siteid=0 -d co_partnerId=2 -d UsingSSL=1 \
  -d ru= -d pp= -d pa1= -d pa2= -d pa3=       \
  -d i1=-1 -d pageType=-1 -d rtmData=         \
  -d userid="${USER}"              \
  -d pass="${PASS}"                \
  -o "krok-${step}.html"           \
  "https://signin.ebay.pl/ws/eBayISAPI.dll?co_partnerid=2&siteid=0&UsingSSL=1"

if [ $? = 0 ]; then
    step=$step+1
    echo -n "OK] [${step} "
else
    echo "NIEPOWODZENIE]"
    exit 1
fi

# Udowadniamy, że zalogowaliśmy się poprzez pobranie strony „Mój eBay”.
${CURL} -s -L -A "${UA}" -c "${JAR}" -b "${JAR}" -e ";auto" \
    -o "krok-${step}.html" \
    'http://my.ebay.com/ws/eBayISAPI.dll?MyEbay'

if [ $? = 0 ]; then
    echo "OK]"
else
    echo "NIEPOWODZENIE]"
    exit 1
fi

# Sprawdzenie wyniku z ostatniego kroku. Jeśli logowanie powiodło się, identyfikator użytkownika znajdzie się
# w kodzie HTML. Jeśli logowanie było nieudane, nie będzie go tam.
count=$(grep -c ${USER} step-${step}.html)
if [ $count -gt 0 ]
then
    echo -n "SUKCES: ${USER} występuje $count razy w pliku krok-${step}.html"
else
    echo "NIEPOWODZENIE: ${USER} nie występuje w pliku krok-${step}.html"
fi
